# -*- coding: utf-8 -*-
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# D7Cl0ud360
# 邮箱: 18656042877@163.com
# 作者：'sugar'
# 公司网址： http://www.dtcloud360.com/
# Copyright 中亿丰信息科技(苏州)有限公司
# 日期：2023/10/10 16:02
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
from pydantic import validator
from .models import BaseNameModel, Field


class MenuBodyModel(BaseNameModel):
    mtype: str = Field("menu", title='类型')
    parent_id: int = Field(None, title='上级菜单id')
    code: str = Field(..., title='唯一标识')
    name: str = Field(..., title='菜单名称')
    icon: str = Field(..., title='菜单图标')
    route: str = Field(..., title='菜单路由')
    path: str = Field(..., title='菜单路径')
    seq_no: int = Field(None, title='排序')
    status: bool = Field(True, title='状态')


class MenuButtonBodyModel(BaseNameModel):
    mtype: str = Field("button", title='类型')
    parent_id: int = Field(..., title='上级菜单id')
    code: str = Field(..., title='唯一标识')
    name: str = Field(..., title='按钮名称')
    method: str = Field(..., title='请求方式')
    route: str = Field(..., title='按钮路由')
    status: bool = Field(True, title='按钮状态')

    @validator("method")
    def method_validator(cls, v):
        if v not in ['GET', 'POST', 'PUT', 'DELETE']:
            raise ValueError('接口请求方式必须在`[GET', 'POST', 'PUT', 'DELETE]`')

        return v
